import axios from 'axios';
import { ElMessage } from 'element-plus';
import { performanceMonitor } from '../utils/performanceMonitor';

// 扩展axios配置类型以支持metadata
declare module 'axios' {
  interface InternalAxiosRequestConfig {
    metadata?: {
      startTime: number;
    };
  }
}

// 创建 axios 实例
const service = axios.create({
  baseURL: '', // 移除 baseURL，让每个 API 调用使用完整路径
  timeout: 15000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=utf-8',
    'Accept': 'application/json',
  },
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 记录请求开始时间
    config.metadata = {
      startTime: performance.now()
    };
    return config;
  },
  (error) => {
    console.error('Request Error:', error); // for debug
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    // 记录请求性能
    const config = response.config;
    if (config.metadata?.startTime) {
      const duration = performance.now() - config.metadata.startTime;
      performanceMonitor.recordApiRequest({
        url: config.url || '',
        method: (config.method || 'GET').toUpperCase(),
        fromCache: false, // 这里是网络请求，不是缓存
        success: true,
        duration
      });
    }

    return response.data;
  },
  (error) => {
    // 记录失败的请求性能
    const config = error.config;
    if (config?.metadata?.startTime) {
      const duration = performance.now() - config.metadata.startTime;
      performanceMonitor.recordApiRequest({
        url: config.url || '',
        method: (config.method || 'GET').toUpperCase(),
        fromCache: false,
        success: false,
        duration,
        error: error.message
      });
    }

    console.error('Response Error:', error.response || error); // for debug
    // 尝试从响应中获取更具体的错误信息
    const message = error.response?.data?.detail || error.response?.data?.message || error.message || '请求失败，请检查网络';
    ElMessage.error(message);
    return Promise.reject(error);
  }
);

export default service;
